16. 训练到底需要多少数据?
当完成评估(Evaluation)和误差分析(Error Analysis)后,
接下来通常会进入整个项目中最耗时的阶段:
数据修复(Data Iteration)
很多团队最终花费的大部分时间不是训练模型,而是:
发现问题
→ 修改数据
→ 重新训练
→ 重新评估
→ 再修改数据
不断循环。
一个常见误区
很多人会问:
训练一个大模型需要多少数据?
实际上这个问题没有固定答案。
更准确的问题应该是:
当前模型距离目标能力还有多远?
因为:
所需数据量与预训练模型已有能力强相关。
数据需求与已有能力的关系
假设目标:
让模型通过微积分考试
情况1:模型已经会微积分
例如 GPT-4、DeepSeek-R1 等。
此时训练目标可能只是:
考试格式
答题风格
输出要求
可能只需要:
20~100条高质量样本
即可看到明显效果。
情况2:模型会数学但不会微积分
此时需要:
极限
导数
积分
泰勒展开
相关训练数据。
可能需要:
几千到几万条样本
情况3:模型本身数学能力很弱
此时问题已经不是微调格式。
而是:
先学习数学
再学习微积分
最后学习考试
可能需要:
数十万甚至更多样本
一个重要原则
graph TD A[目标能力] --> B[模型已有能力] B --> C[能力差距] C --> D[决定数据规模]
因此:
数据量不是由任务决定,而是由能力差距决定。
预训练阶段的数据规模
预训练与后训练完全不同。
Chinchilla Scaling Law
2022年 DeepMind 的 Chinchilla 论文提出:
模型参数量与训练Token数量应保持合理比例。
经验公式:
1个参数
≈
20个训练Token
例如:
| 模型规模 | 推荐Token |
|---|---|
| 1B | 20B |
| 7B | 140B |
| 10B | 200B |
| 70B | 1.4T |
为什么需要这么多数据
预训练需要学习:
- 语言
- 世界知识
- 推理
- 代码
- 数学
- 常识
本质上是在学习:
整个互联网
GPT-3 的例子
GPT-3(175B)论文公开数据显示:
训练数据规模约:
300B Tokens
级别。
预训练阶段:
数据规模决定模型上限。
后训练阶段的数据规模
到了 SFT 和 RL 阶段。
情况发生变化:
规模 ↓
质量 ↑
ChatGPT 的经典案例
OpenAI 在 InstructGPT 论文中公开:
人工标注数据规模:
约13000条高质量指令
量级。
远小于预训练。
但效果提升巨大。
为什么后训练更关注质量
例如:
下面两种数据。
方案A:
10000条AI生成数据
方案B:
100条专家编写数据
很多时候:
100条专家数据
效果更好。
因为:
后训练是在学习行为,而不是学习知识。
数据规模增长曲线
模型能力不会随着数据无限增长。
通常表现为:
graph LR A[100条] --> B[1000条] B --> C[10000条] C --> D[100000条] D --> E[趋于饱和]
更准确地说:前期收益巨大。后期收益逐渐减少。
这称为:
Data Scaling Saturation(数据饱和)
先小规模实验
工业界通常不会一开始准备:
100万条数据
而是:
100条
↓
1000条
↓
10000条
逐步扩大。
推荐的数据迭代流程
graph TD A[准备100条数据] --> B[LoRA训练] B --> C[评估] C --> D[误差分析] D --> E[补充数据] E --> F[重新训练] F --> C
为什么推荐 LoRA
LoRA 最大优势:
成本低
训练快
迭代快
在数据探索阶段:
通常建议:
LoRA
→ 验证方向
→ 再决定是否全量微调
数据多样性的重要性
很多数据集失败的原因不是数量不足。
而是:
表达方式太单一
例如:
训练:
北京是中国首都吗?
1000次。
测试:
中国的首都在哪?
模型不会。
问题不是数量。
而是:
缺乏表达多样性
数据覆盖比重复更重要
应该覆盖:
不同语气
不同场景
不同长度
不同措辞
例如:
中国首都是什么?
北京是哪个国家的首都?
中国行政中心在哪里?
RL阶段的数据增长
强化学习也类似。
通常流程:
graph TD A[1000个Prompt] --> B[RL训练] B --> C[评估] C --> D[发现问题] D --> E[增加Prompt] E --> F[继续RL]
而不是:
一次收集100万条Prompt
如何持续添加针对性样本
这是实际项目中最重要的技巧。
假设评估发现:
分数计算错误
不要重新生成全部数据。
而是:
新增:
百分比计算
折扣计算
税率计算
相关数据。
形成:
graph TD A[评估] --> B[发现错误] B --> C[针对性收集数据] C --> D[训练] D --> E[重新评估]
这就是现代大模型训练的核心闭环。
关于 Think 数据需要多少?
很多人会问:
需要多少CoT数据?
实际上:
没有固定数字。
更重要的是:
Think数据占比
一个推荐方案
支持两种模式:
普通回答
input:
问题
output:
回答
推理回答
input:
问题 <use_thinking>
output:
<think>
推理过程
</think>
回答
为什么增加 use_thinking
这样模型可以学会:
是否需要思考
而不是:
永远输出Think
推理数据比例建议
经验上:
| 场景 | Think占比 |
|---|---|
| 通用聊天 | 10%~20% |
| 助手模型 | 20%~40% |
| 数学模型 | 40%~60% |
| 推理模型 | 60%~90% |
例如:
DeepSeek-R1、
OpenAI o系列、
Claude Reasoning
本质上都包含大量推理数据和推理奖励。
数据规模经验法则
| 目标 | 推荐起步数据 |
|---|---|
| 风格模仿 | 20~100 |
| 指令跟随 | 100~1000 |
| 特定任务 | 1000~10000 |
| 新领域能力 | 1万~10万 |
| 新知识体系 | 10万+ |
| 预训练 | 百亿~万亿Token |
一句话总结
训练需要多少数据,并不取决于任务本身,而取决于预训练模型距离目标能力还有多远。
因此最佳实践通常是:
先用 LoRA + 少量高质量数据验证方向,再通过评估和误差分析持续增加针对性样本,而不是一开始就准备海量数据。